package lista;

public class ListaS {
	private Nodo primero;
	private Nodo ultimo;
	private int tamano;

	public ListaS() {
		this.primero = null;
		this.ultimo = null;
		this.tamano = 0;
	}

	// Metodo utilizado para denotar que la lista se encuentra vacia.
	public boolean siVacio() {
		if (this.primero == null)
			System.out.println("La lista se encuentra vacia");
		return (this.primero == null);

	}

	// Metodo para agregar al final de la lista.
	public ListaS addLast(int dato) {
		if (siVacio()) {
			Nodo nuevo = new Nodo(dato);
			primero = nuevo;
			ultimo = nuevo;
		} else {
			Nodo nuevo = new Nodo(dato);
			nuevo.nodoDer = null;
			ultimo.nodoDer = nuevo;
			ultimo = nuevo;
		}
		System.out.println("Nodo " + dato + "  insertado");
		this.tamano++;
		return this;
	}

	// Metodo para borrar al final de la lista.
	public Nodo deleteLast() {
		Nodo eliminar = null;
		if (siVacio()) {
			System.out
					.println("La lista se encuentra vacia, \n NO SE PUEDE BORRAR");
			return null;
		}
		if (primero == ultimo) {
			primero = null;
			ultimo = null;
		} else {
			Nodo actual = primero;
			while (actual.nodoDer != ultimo) {
				actual = actual.nodoDer;
			}
			eliminar = actual.nodoDer;
			actual.nodoDer = null;
			ultimo = actual;
		}
		this.tamano--;
		return eliminar;
	}

	// Metodo que imprime el tamaño de la lista.
	public int tamano() {
		return this.tamano;
	}

	// Metodo que imprime la lista y los valores ingresados.
	public void imprimir() {
		if (tamano != 0) {
			Nodo temp = primero;
			String str = "";
			for (int i = 0; i < this.tamano; i++) {
				str = str + temp.dato + "\n";
				temp = temp.nodoDer;
			}
			System.out.println(str);
			System.out.println("");
		}
	}

	// Metodo que busca un valor en una lista enlazada.
	public boolean buscar(int datobusq) {
		boolean encontrado = false;
		if (siVacio()) {
			System.out
					.println("La lista se encuentra vacia, \n \t por lo que búsqueda ERROR");
		} else {
			Nodo actual = primero;
			while (actual != null && encontrado == false) {
				if (actual.dato == datobusq) {
					encontrado = true;
					System.out.println("Encontrado " + datobusq);
				} else {
					actual = actual.nodoDer;
				}
			}
		}
		// this.tamano++;
		return encontrado;

	}
}